#ifndef COMPUTING_PERCEPTION_LIDAR_PROCESS_CLASSIFY_CLASSIFY_H
#define COMPUTING_PERCEPTION_LIDAR_PROCESS_CLASSIFY_CLASSIFY_H

#include "boundingbox.h"
#include "common/algorithm_type/lidar_cell_objs_type.h"
#include "common/algorithm_type/lidar_cell_type.h"
// #include "common/log.h"
#include "heading.h"
#include "lshape.h"
#include "lshape2.h"
#include <limits>
#include <memory>
#include <stdint.h>
#include <vector>
#include "obb.h"
namespace perception
{
    namespace algorithm
    {
        class Classify
        {
        public:
            /// The construct methord of the class Classify.
            Classify();
            /// Classify lidar objects based on object scales.
            /**
             * Objects are marked in several types
             * which are NOISE, SHORT_LOW, CAR, TRUCK, PEDESTRIAN, CYCLIST, UNKNOWN.
             * \param[in] lidar_objects clusted by cells.
             */
            void Compute(std::vector<LidarObject> &lidar_objects);
            void Compute(LidarObject &lidar_object);

        private:
            void GetType(LidarObject &object);
            std::shared_ptr<BoundingBox> boundingbox_;
            // std::shared_ptr<Heading> heading_;
            std::shared_ptr<LShape> lshape_;
            std::shared_ptr<LShape2> lshape2_;
            int id;
        };
    } // namespace perception
} // namespace avos
#endif // COMPUTING_PERCEPTION_LIDAR_PROCESS_CLASSIFY_CLASSIFY_H